#include "list.h"

/* 测试线性表插入数据功能 */
void ListTest01(List_t *pL)
{
	int i;

	printf("<-------------------- Test 01 -------------------->");

	printf("\n");

	/* 第一次插入5个数据 */
	ListIsEmpty(pL);
	for(i = 1; i < 6; i++)
	{
		ListInsertData(pL, i, i);
	}

	printf("list length is %d\n", ListLength(pL));
	for(i = 0; i < 5; i++)
	{
		printf("%d ", pL->data[i]);
	}
	printf("\n");

	/* 在前面5个数据之间插入数据 */
	ListInsertData(pL, 2, 10);
	ListInsertData(pL, 4, 20);
	printf("list length is %d\n", ListLength(pL));
	for(i = 0; i < 7; i++)
	{
		printf("%d ", pL->data[i]);
	}
	printf("\n");

	/* 在表尾插入数据 */
	ListInsertData(pL, 8, 30);
	printf("list length is %d\n", ListLength(pL));
	for(i = 0; i < 8; i++)
	{
		printf("%d ", pL->data[i]);
	}
	printf("\n");

	/* 插入位置非法 */
	ListInsertData(pL, 0, 90);
	ListInsertData(pL, 10, 100);

	printf("<------------------------------------------------->");

	printf("\n");
}

/* 测试线性表遍历数据功能 */
void ListTest02(List_t *pL)
{
	printf("<-------------------- Test 02 -------------------->");

	printf("\n");

	/* 在测试01基础上 */
	ListTraverse(pL);

	printf("<------------------------------------------------->");

	printf("\n");
}

/* 测试查询数据功能 */
void ListTest03(List_t *pL)
{
	printf("<-------------------- Test 03 -------------------->");

	printf("\n");

	dataType data = 0;

	/* 在测试01基础上 */
	ListSeekData(pL, 3, &data);
	printf("seek pos 3 data: %d\n", data);

	ListSeekData(pL, 6, &data);
	printf("seek pos 6 data: %d\n", data);

	printf("<------------------------------------------------->");

	printf("\n");
}

/* 测试删除数据功能 */
void ListTest04(List_t *pL)
{
	printf("<-------------------- Test 04 -------------------->");

	printf("\n");

	dataType data = 0;

	/* 在测试01基础上 */
	ListDeleteData(pL, 3, &data);
	printf("delete pos 3 data: %d\n", data);
	ListTraverse(pL);
	printf("list length is %d\n", ListLength(pL));

	ListDeleteData(pL, 6, &data);
	printf("delete pos 6 data: %d\n", data);
	ListTraverse(pL);
	printf("list length is %d\n", ListLength(pL));

	printf("<------------------------------------------------->");

	printf("\n");
}

/* 测试清空数据功能 */
void ListTest05(List_t *pL)
{
	printf("<-------------------- Test 05 -------------------->");

	printf("\n");

	/* 在测试04基础上 */
	ListTraverse(pL);
	printf("list length is %d\n", ListLength(pL));

	ListClear(pL);
	printf("list length is %d\n", ListLength(pL));

	printf("<------------------------------------------------->");

	printf("\n");
}

int main(void)
{
	List_t List;

	ListInit(&List);
	
	ListTest01(&List);
	ListTest02(&List);
	ListTest03(&List);
	ListTest04(&List);
	ListTest05(&List);

	return 0;
}
